#ifndef _MEMREGION_H_
#define _MEMREGION_H_

#include <common.h>

#define USER_MM_BASE 0x100000

#define KERNEL_MAX_TABLE 6
#define KERNEL_MM_BASE 0xC0000000

// 页目录的虚拟基地址，可以用来访问到各个PDE
#define DIR_BASE_VADDR 0xFFFFF000

// 页表的虚拟基地址，可以用来访问到各个PTE
#define TBL_BASE_VADDR 0xFFC00000
#define PD_MP_SELF TBL_BASE_VADDR

// 临时 页目录 和 页表 挂载点 mount point
#define PD_MP_1 0xFF800000
#define PG_MP_1 0xFF400000
#define PG_MP_2 (PG_MP_1 + 0x1000)
#define PG_MP_3 (PG_MP_2 + 0x1000)
#define PG_MP_4 (PG_MP_3 + 0x1000)

#define KSTK_SIZE           0x2000
#define KSTK_AREA_DIR_IDX   1021
#define KSTK_AREA_END       0xFF7FFFF0
#define KSTK_AREA_START     (PG_MP_4 + 0x1000)
#define KSTK_AREA_SIZE      MEM_4MB - 4 * PG_SIZE

#define VMAP_START (KERNEL_MM_BASE + KERNEL_MAX_TABLE * MEM_4MB) // 0xC1800000
#define VMAP_END   (KSTK_AREA_START - MEM_4MB) // 0xFF000000
#define VMAP_SIZE  (VMAP_END - VMAP_START)

#define USTACK_SIZE PG_SIZE

#endif /* _MEMREGION_H_ */